home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2010 May / Mac Life Ubuntu.iso / casper / filesystem.squashfs / usr / src / linux-headers-2.6.28-15 / include / asm-mn10300 / frame.inc < prev    next >
Encoding:
Text File  |  2008-12-24  |  2.2 KB  |  92 lines

  1. /* MN10300 Microcontroller core system register definitions -*- asm -*-
  2.  *
  3.  * Copyright (C) 2007 Red Hat, Inc. All Rights Reserved.
  4.  * Written by David Howells (dhowells@redhat.com)
  5.  *
  6.  * This program is free software; you can redistribute it and/or
  7.  * modify it under the terms of the GNU General Public Licence
  8.  * as published by the Free Software Foundation; either version
  9.  * 2 of the Licence, or (at your option) any later version.
  10.  */
  11. #ifndef _ASM_FRAME_INC
  12. #define _ASM_FRAME_INC
  13.  
  14. #ifndef __ASSEMBLY__
  15. #error not for use in C files
  16. #endif
  17.  
  18. #ifndef __ASM_OFFSETS_H__
  19. #include <asm/asm-offsets.h>
  20. #endif
  21.  
  22. #define pi break
  23.  
  24. #define fp a3
  25.  
  26. ###############################################################################
  27. #
  28. # build a stack frame from the registers
  29. # - the caller has subtracted 4 from SP before coming here
  30. #
  31. ###############################################################################
  32. .macro SAVE_ALL
  33.     add    -4,sp                # next exception frame ptr save area
  34.     movm    [other],(sp)
  35.     mov    usp,a1
  36.     mov    a1,(sp)                # USP in MOVM[other] dummy slot
  37.     movm    [d2,d3,a2,a3,exreg0,exreg1,exother],(sp)
  38.     mov    sp,fp                # FRAME pointer in A3
  39.     add    -12,sp                # allow for calls to be made
  40.     mov    (__frame),a1
  41.     mov    a1,(REG_NEXT,fp)
  42.     mov    fp,(__frame)
  43.  
  44.     and    ~EPSW_FE,epsw            # disable the FPU inside the kernel
  45.  
  46.     # we may be holding current in E2
  47. #ifdef CONFIG_MN10300_CURRENT_IN_E2
  48.     mov    (__current),e2
  49. #endif
  50. .endm
  51.  
  52. ###############################################################################
  53. #
  54. # restore the registers from a stack frame
  55. #
  56. ###############################################################################
  57. .macro RESTORE_ALL
  58.     # peel back the stack to the calling frame
  59.     # - this permits execve() to discard extra frames due to kernel syscalls
  60.     mov    (__frame),fp
  61.     mov    fp,sp
  62.     mov    (REG_NEXT,fp),d0                # userspace has regs->next == 0
  63.     mov    d0,(__frame)
  64.  
  65. #ifndef CONFIG_MN10300_USING_JTAG
  66.     mov    (REG_EPSW,fp),d0
  67.     btst    EPSW_T,d0
  68.     beq    99f
  69.  
  70.     or    EPSW_NMID,epsw
  71.     movhu    (DCR),d1
  72.     or    0x0001, d1
  73.     movhu    d1,(DCR)
  74.  
  75. 99:
  76. #endif
  77.     movm    (sp),[d2,d3,a2,a3,exreg0,exreg1,exother]
  78.  
  79.     # must restore usp even if returning to kernel space,
  80.     # when CONFIG_PREEMPT is enabled.
  81.     mov    (sp),a1                # USP in MOVM[other] dummy slot
  82.     mov    a1,usp
  83.  
  84.     movm    (sp),[other]
  85.     add    8,sp
  86.     rti
  87.  
  88. .endm
  89.  
  90.  
  91. #endif /* _ASM_FRAME_INC */
  92.